package com.itheima.service.impl.system;

import com.github.pagehelper.PageHelper;
import com.itheima.domain.system.Permission;
import com.itheima.domain.system.Role;
import com.itheima.domain.system.User;
import com.itheima.mapper.system.PermissionMapper;
import com.itheima.mapper.system.UserMapper;
import com.itheima.service.system.UserService;
import com.itheima.utils.IdUtil;
import com.itheima.utils.MD5Util;
import com.itheima.utils.MapperUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class UserServiceImpl implements UserService {

    @Override
    public User login(String username, String pwd) {
        UserMapper mapper = MapperUtil.getMapper(UserMapper.class);
        User user = new User();
        user.setUsername(username);
        user.setPassword(pwd);
        return mapper.findByIdAndPwd(user);
    }

    @Override
    public void logout(String id) {
        /*UserMapper mapper = MapperUtil.getMapper(UserMapper.class);
        mapper.logout(id);*/

    }

    @Override
    public void update(String id, String newPsd) {
        UserMapper mapper = MapperUtil.getMapper(UserMapper.class);
        User user = new User();
        user.setId(id);
        user.setPassword(newPsd);
        mapper.updatePwd(user);
    }

    @Override
    public List<User> list(int pageN, int pageS) {
        UserMapper mapper = MapperUtil.getMapper(UserMapper.class);

        PageHelper.startPage(pageN,pageS);
        return mapper.findAll();
    }

    @Override
    public List<User> findAll() {
        UserMapper mapper = MapperUtil.getMapper(UserMapper.class);
        return mapper.findAll();
    }

    @Override
    public void save(User user) {
        UserMapper mapper = MapperUtil.getMapper(UserMapper.class);
        user.setId(IdUtil.getId());
        String password = MD5Util.md5(user.getPassword());
        user.setPassword(password);
        mapper.save(user);
    }

    @Override
    public void delete(String id) {
        SqlSession session = MapperUtil.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        mapper.deleteRole(id);
        session.commit();
        mapper.delete(id);
        session.commit();
        session.close();
    }

    @Override
    public List<String> findRoleIdsByUid(String uid) {

        UserMapper mapper = MapperUtil.getMapper(UserMapper.class);
        return mapper.findRoleIdsByUid(uid);
    }

    //模糊查询
    @Override
    public List<User> selectLike(String msg, Integer pageN, Integer pageS) {
        UserMapper mapper = MapperUtil.getMapper(UserMapper.class);
        PageHelper.startPage(pageN, pageS);
        String username = "%" + msg + "%";
        return mapper.selectLike(username);
    }

    @Override
    public void updateMsg(User user) {
        UserMapper mapper = MapperUtil.getMapper(UserMapper.class);
        mapper.updateMsg(user);
    }

    @Override
    public List<Permission> findPermsByRid(String rid) {
        PermissionMapper mapper = MapperUtil.getMapper(PermissionMapper.class);
        List<Permission> perms = mapper.findPermsByRid(rid);
        return perms;
    }

    @Override
    public User findByUid(String id) {
        UserMapper mapper = MapperUtil.getMapper(UserMapper.class);

        return mapper.findByUid(id);
    }

    @Override
    public void addRoleToUser(String userId, String[] ids) {

        SqlSession session = MapperUtil.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        String uid = userId;
        mapper.deleteRole(userId);
        session.commit();
        for (String id : ids) {
            mapper.addRoleToUser(uid,id);
            session.commit();
        }
        session.close();
    }

}
